#ifndef __FOREST_H__
#define __FOREST_H__


#include "Tree.h"
#include <deque> 
using namespace std; 


class  Forest
{
	deque<Tree*> Frst;//front=left back=right
	deque<Tree*>::iterator iter;
			
public:
	Forest() {iter = Frst.begin();};
	Forest(const Forest& Fcopy);	// c'ctor
	~Forest() {Frst.~deque();};
	

	void AddRightTree(Tree* T);
	Tree* GetRightTree() const;
	Forest GetRightRootlessTree() const;
	void RemoveRightTree();
	void RemoveRightRoot();

	void AddLeftTree(Tree* T);
	Tree* GetLeftTree() const;
	Forest GetLeftRootlessTree() const;
	void RemoveLeftTree();
	void RemoveLeftRoot();

	int ForestCount() const {return Frst.size();};	// number of roots in the Forest
	int ForestSize() const;
	Tree* getTree (int i) const {return Frst[i];};

};

#endif //__FOREST_H__
